package com.czxy.servlet;

import cn.itcast.commons.CommonUtils;
import cn.itcast.servlet.BaseServlet;
import com.czxy.domain.*;
import com.czxy.service.OrderService;
import com.github.pagehelper.PageInfo;

import javax.servlet.annotation.WebServlet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

@WebServlet("/orderServlet")
public class OrderServlet extends BaseServlet {


    /**
     * 根据订单的id 获取订单数据
     * @return
     */
    public String findOrderByOid(){
        //1.接受oid参数
        String oid = getRequest().getParameter("oid");
        //2.调用service获取结果
        OrderService service = new OrderService();
        Order order = service.findOrderByOid(oid);
        //3.存到request域
        getRequest().setAttribute("order", order);
        //4.请求转发
        return "/jsp/order_info.jsp";
    }


    /**
     * 根据用户id 分页查询该用户的所有的订单
     * @return
     */
    public String findPageInfoByUid(){
        //1.接收参数
        String uid = getRequest().getParameter("uid");
        String pageNum = getRequest().getParameter("pageNum");
        int pageSize=2;// 每页最多显示2条

        //2.调用Service获取结果
        OrderService service = new OrderService();
        PageInfo pageInfo = service.findPageInfoByUid(uid, Integer.parseInt(pageNum), pageSize);
        //3.存储到request域
        getRequest().setAttribute("pageInfo", pageInfo);

        //4.请求转发
        return "/jsp/order_list.jsp";
    }



    /**
     * 生成订单
     * @return
     */
    public String createOrder(){

        //1.判断当前是否登录, 如果没登录 让页面跳转到登录页面
        User loginU = (User) getSession().getAttribute("loginU");
        if(loginU == null){
            return "redirect:/jsp/login.jsp";
        }
        //2.获取当前登录用户的uid
        String uid = loginU.getUid();

        //3.从购物车中获取数据 拼装成一个Order 对象
        Cart cart = (Cart) getSession().getAttribute("cart");
        Order order = new Order();
        order.setOid(CommonUtils.uuid());
        order.setOrdertime(new Date());
        order.setTotalPrice(cart.getTotalMoney()); // 总金额
        order.setState(1);// 下单 未付款状态
        order.setUid(uid);
        // 从购物车中 把购物车项的数据 变成订单项数据
        Map<String, CartItem> map = cart.getMap();
        List<OrderItem> orderItemList = new ArrayList<>();
        for (Map.Entry<String, CartItem> entry : map.entrySet()) {
            CartItem ci = entry.getValue();
            OrderItem oi = new OrderItem();

            oi.setItemid(CommonUtils.uuid());
            oi.setQuantity(ci.getCount());// 数量
            oi.setSubPrice(ci.getSubTotal()); // 小计
            oi.setPid(ci.getProduct().getPid()); // 订单项中商品的id
            oi.setOid(order.getOid()); // 该订单项所属的 订单 id

            oi.setProduct(ci.getProduct()); // 把订单项中的 商品对象赋值

            orderItemList.add(oi);
        }
        // 把订单项集合添加到订单中
        order.setItemList(orderItemList);
        //4.把Oder对象的数据添加到数据库中
        OrderService service = new OrderService();
        service.addOrder(order);

        // 清除掉购物车数据
        cart.clear();
        getSession().removeAttribute("cart");

        //5.把Oder对象存储到request域中,请求转发到order_info.jsp中
        getRequest().setAttribute("order", order);
        return "/jsp/order_info.jsp";


    }
}
